﻿using System;

namespace HlELock.Core
{

    /// <summary>
    /// 发卡服务接口
    /// </summary>
    public interface ICardService
    {

        #region 工厂用卡
        /// <summary>
        /// 工厂测试卡
        /// </summary>
        /// <returns></returns>
        bool IssueFactoryTestCard();

        /// <summary>
        /// 工厂信息卡
        /// </summary>
        /// <returns></returns>
        bool IssueFactoryInfoCard();

        /// <summary>
        /// 工厂清除卡
        /// </summary>
        /// <returns></returns>
        bool ClearFactoryCard();
        #endregion

        #region 发客人卡
        /// <summary>
        /// 发客人卡（房卡)
        /// </summary>
        /// <param name="roomNo">房间号</param>
        /// <param name="startDate">开始时间</param>
        /// <param name="endDate">结束时间</param>
        /// <param name="buildingNumber">楼栋</param>
        /// <param name="floorNumber">楼层</param>
        ///<param name="subRoomNumber">套间内房间号</param>
        /// <returns>卡号</returns>
        string IssueCard(string roomNo, DateTime startDate, DateTime endDate, int buildingNumber = 0, int floorNumber = 0, int subRoomNumber = 0);

        /// <summary>
        /// 安装卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueSetupCard();

        /// <summary>
        /// 时间卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueTimeCard();

        /// <summary>
        /// 组控卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueGroupCard();

        /// <summary>
        /// 应急卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueEmergencyCard();

        /// <summary>
        /// 记录卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueRecordCard();

        /// <summary>
        /// 挂失卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueLostCard();

        /// <summary>
        /// 退房卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        string IssueCheckOutCard();

        /// <summary>
        /// 封锁卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueLockCard();

        /// <summary>
        /// 授权卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueAuthCard();

        /// <summary>
        /// 总控卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueControlAuthCard();

        /// <summary>
        /// 楼栋卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueBuildCard();

        /// <summary>
        /// 楼层卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueFloorCard();


        /// <summary>
        /// 保洁卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueClearCard();

        /// <summary>
        /// 信息卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueInfoCard();

        /// <summary>
        /// 组控设置卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssueGroupSettingCard();

        /// <summary>
        /// 密码设置卡
        /// </summary>
        /// <param name="roomNo"></param>
        /// <param name="buildingNumber"></param>
        /// <param name="floorNumber"></param>
        /// <param name="subRoomNumber"></param>
        /// <returns></returns>
        bool IssuePasswordCard();

        #endregion

        /// <summary>
        /// 读取卡片信息
        /// </summary>
        /// <returns></returns>
        CardDetailInfo ReadCard();

        /// <summary>
        /// 清卡
        /// </summary>
        /// <returns></returns>
        bool ClearCard();
    }
}
